# pragma once

# include "cpp_tools.h"
# include "udpSettings.h"
# include "dataStruct.h"

class estimator_base
{
public:
    struct state
    {
        double x;
        double y;
        double varphi;
        double psi;
        double gamma;
        double v_x;
        double v_y;
        double omega;
        double a_x;
        double a_y;
    };
private:
    /* data */
public:
    estimator_base()
    {

    };

    ~estimator_base()
    {

    };
    
    /// @brief 调用该函数用于提前停止对象工作
    virtual void shutdown() = 0;

    /// @brief 获取向量形式的状态量
    /// @return 
    virtual Eigen::VectorXd getStateAsVector() = 0;

    /// @brief 获取结构体形式的状态量
    /// @return 
    virtual state getStateAsStruct() = 0;

    /// @brief 获取状态量更新时间
    /// @return 
    virtual double getUpdateTime() = 0;

    /// @brief 添加局部坐标系定位修正
    /// @param x 
    /// @param y 
    virtual void reInitFrame(double x, double y) = 0;

    estimator_base(const estimator_base&) = delete;
};
